#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
中文字体测试脚本
用于验证matplotlib是否能正确显示中文字符
"""

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import platform

def test_chinese_font():
    """测试中文字体显示"""
    print(f"当前系统: {platform.system()}")
    
    # 获取所有可用字体
    available_fonts = set([f.name for f in fm.fontManager.ttflist])
    print(f"系统共有 {len(available_fonts)} 个字体")
    
    # Mac系统中文字体
    if platform.system() == 'Darwin':
        chinese_fonts = [
            'PingFang SC',
            'Hiragino Sans GB', 
            'STHeiti',
            'Heiti SC',
            'Arial Unicode MS',
            'Apple LiGothic Medium'
        ]
    else:
        chinese_fonts = [
            'SimHei',
            'Microsoft YaHei',
            'Arial Unicode MS',
            'Noto Sans CJK SC'
        ]
    
    print("检查中文字体可用性:")
    found_fonts = []
    for font in chinese_fonts:
        if font in available_fonts:
            print(f"  ✓ {font} - 可用")
            found_fonts.append(font)
        else:
            print(f"  ✗ {font} - 不可用")
    
    if not found_fonts:
        print("❌ 未找到任何中文字体!")
        return False
    
    # 测试字体显示
    test_font = found_fonts[0]
    print(f"使用字体 '{test_font}' 进行测试")
    
    try:
        # 设置字体
        plt.rcParams['font.sans-serif'] = [test_font]
        plt.rcParams['axes.unicode_minus'] = False
        
        # 创建测试图表
        fig, ax = plt.subplots(figsize=(10, 6))
        
        # 测试数据
        categories = ['普通表查询', '时序表查询', '聚合查询', '复杂查询']
        values = [1.2, 0.8, 2.1, 1.5]
        
        bars = ax.bar(categories, values, color=['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4'])
        
        # 设置标题和标签
        ax.set_title('数据库性能测试结果', fontsize=16, fontweight='bold')
        ax.set_xlabel('查询类型', fontsize=12)
        ax.set_ylabel('执行时间 (秒)', fontsize=12)
        
        # 添加数值标签
        for bar, value in zip(bars, values):
            height = bar.get_height()
            ax.text(bar.get_x() + bar.get_width()/2., height + 0.05,
                   f'{value}秒', ha='center', va='bottom', fontsize=10)
        
        # 调整布局
        plt.tight_layout()
        
        # 保存测试图片
        output_path = '/Users/gaoyu/source_code/HydroPulse-DX/src/hydropulse/tests/chinese_font_test.png'
        plt.savefig(output_path, dpi=300, bbox_inches='tight')
        plt.close()
        
        print(f"✅ 中文字体测试成功! 测试图片已保存到: {output_path}")
        print("请检查图片中的中文是否正确显示")
        return True
        
    except Exception as e:
        print(f"❌ 字体测试失败: {e}")
        return False

def list_all_fonts():
    """列出所有可用字体"""
    print("列出所有可用字体:")
    available_fonts = sorted([f.name for f in fm.fontManager.ttflist])
    
    chinese_related = []
    for font in available_fonts:
        if any(keyword in font.lower() for keyword in ['chinese', 'cjk', 'han', 'ping', 'hei', 'song', 'kai']):
            chinese_related.append(font)
    
    if chinese_related:
        print("可能支持中文的字体:")
        for font in chinese_related:
            print(f"  - {font}")
    else:
        print("⚠️  未找到明显的中文字体")
    
    print(f"\n所有字体列表 (共{len(available_fonts)}个):")
    for i, font in enumerate(available_fonts, 1):
        if i <= 50:  # 只显示前50个
            print(f"  {i:2d}. {font}")
        elif i == 51:
            print(f"  ... 还有 {len(available_fonts) - 50} 个字体")
            break

if __name__ == '__main__':
    print("=== 中文字体测试工具 ===")
    
    # 清除字体缓存
    try:
        fm._rebuild()
        print("字体缓存已清除")
    except:
        pass
    
    # 列出字体
    list_all_fonts()
    
    print("\n" + "="*50)
    
    # 测试中文字体
    success = test_chinese_font()
    
    if success:
        print("\n✅ 字体测试完成! 如果图片中的中文显示正常，说明字体配置成功。")
    else:
        print("\n❌ 字体测试失败! 请检查系统是否安装了中文字体。")
        
        if platform.system() == 'Darwin':
            print("\nMac系统解决方案:")
            print("1. 确保系统语言设置包含中文")
            print("2. 在系统偏好设置 > 语言与地区中添加中文")
            print("3. 重启Python环境")